@startuml
title Общая схема пересылки сообщений между компонентами расширения

participant inject_script.js as inject_script
participant content_script.js as content_script
participant background.js as background
participant options.js as options
participant popup.js as popup
participant all_devtools as all_devtools

==  inject_script.js ==
group #00FFAA inject_script.js - content_script.js
inject_script -> content_script : window.postMessage ->\nwindow.addEventListener("message")
end

== content_script.js ==
group #00FFAA content_script.js - inject_script.js
content_script -> inject_script: window.postMessage ->\nwindow.addEventListener("message")
end
group #99BAC2 content_script.js - background.js
content_script -> background: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener
background -> content_script
end
group #99BAC2 content_script.js - options.js
content_script -> options: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыта страница опций\nи пользователь находится на странице сайта с которым ведется работа)
options -> content_script
end
group #99BAC2 content_script.js - popup.js
content_script -> popup: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-окно)
popup -> content_script
end
group #99BAC2 content_script.js - all_devtools
content_script -> all_devtools: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто окно DevTools)
all_devtools -> content_script
end

== popup.js ==
group #D1B077 popup.js - content_script.js
popup -> content_script: chrome.tabs.sendMessage(tab.id) ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-окно)
content_script -> popup
end
group #99BAC2 popup .js - background.js
popup -> background: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener
background -> popup 
end
group #99BAC2 popup.js - options.js
popup -> options: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыта страница опций)
options -> popup
end
group #99BAC2 popup.js - all_devtools
popup -> all_devtools: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто окно DevTools)
all_devtools -> popup
end

== options.js ==
group #D1B077 options.js - content_script.js
options -> content_script: chrome.tabs.sendMessage(tab.id) ->\nchrome.runtime.onMessage.addListener\n(При условии что открыта страница опций\nи пользователь находится на странице сайта с которым ведется работа)
content_script -> options
end
group #D1B077 options.js - content_script.js
options -> content_script: chrome.tabs.sendMessage(tab.openerTabId) ->\nchrome.runtime.onMessage.addListener\n(При условии что открыта страница опций и пользователь находится на ней)
content_script -> options
end
group #99BAC2 options .js - background.js
options -> background: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener
background -> options 
end
group #99BAC2 options.js - popup.js
options -> popup: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-меню)
popup -> options
end
group #99BAC2 options.js - all_devtools
options -> all_devtools: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто окно DevTools)
all_devtools -> options
end

== devtools.js, panel.js, panels_elements.js, panels_sources.js (all_devtools) ==
group #D1B077 all_devtools - content_script.js
all_devtools -> content_script: chrome.tabs.sendMessage(tab.id) ->\nchrome.runtime.onMessage.addListener\n(При условии что открыта вкладка DevTools)
content_script -> all_devtools
end
group #99BAC2 all_devtools - background.js
all_devtools -> background: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener
background -> all_devtools
end
group #99BAC2 all_devtools - popup.js
all_devtools -> popup: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-меню)
popup -> all_devtools
end
group #99BAC2 all_devtools - options.js
all_devtools -> options: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто окно опций)
options -> all_devtools
end

== background.js ==
group #D1B077 background.js - content_script.js
background -> content_script: chrome.tabs.sendMessage(tab.id) ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-окно)
content_script -> background
end
group #99BAC2 background .js - all_devtools
background -> all_devtools: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener
all_devtools -> background 
end
group #99BAC2 background.js - popup.js
background -> popup: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто попап-меню)
popup -> background
end
group #99BAC2 background.js - options.js
background -> options: chrome.runtime.sendMessage ->\nchrome.runtime.onMessage.addListener\n(При условии что открыто окно опций)
options -> background
end

@enduml